CREATE TABLE myt (
           id integer primary key , txt varchar(50));
INSERT INTO myt SELECT  
generate_series(1,100000), ' some text to ensure the table takes  
many blocks';
ANALYZE myt;
SHOW random_page_cost ;           
SET random_page_cost TO 400;
EXPLAIN SELECT id,txt FROM myt WHERE id IN (1,2);
SET random_page_cost TO 4000;
EXPLAIN SELECT id,txt FROM myt WHERE id IN (1,2);
SET seq_page_cost TO 400;
EXPLAIN SELECT id,txt FROM myt WHERE id IN (1,2);
EXPLAIN ANALYZE SELECT * FROM myt;
SELECT
relpages * current_setting('seq_page_cost')::decimal + 
reltuples * current_setting('cpu_tuple_cost')::decimal 
as total_cost FROM pg_class WHERE relname='myt';
SHOW enable_indexscan ;
EXPLAIN SELECT id,txt FROM myt WHERE id IN (1,2);
SET enable_indexscan TO false;
SHOW enable_indexscan ;
EXPLAIN SELECT id,txt FROM myt WHERE id IN (1,2);
SHOW enable_bitmapscan;
SET enable_bitmapscan TO false;
EXPLAIN SELECT id,txt FROM myt WHERE id IN (1,2);
DROP TABLE myt;
CREATE TABLE myt (id int, amt numeric);
INSERT INTO myt SELECT generate_series(1,10000), 100;
CREATE MATERIALIZED VIEW mv_myt AS SELECT avg(amt)
FROM myt;
ANALYZE myt;
ANALYZE mv_myt;
EXPLAIN SELECT avg(amt) FROM myt;
EXPLAIN SELECT * FROM mv_myt;
INSERT INTO myt VALUES (90000,200);
SELECT avg(amt) FROM myt;
SELECT *  FROM mv_myt;
REFRESH MATERIALIZED VIEW mv_myt ;
SELECT *  FROM mv_myt;
DROP TABLE myt;
SELECT matviewname ,definition FROM pg_matviews;

CREATE TABLE tran(id integer PRIMARY KEY,  
trandate date);

CREATE TABLE tran_y2013 (
CHECK ( trandate >= DATE '2013-01-01' AND 
trandate < DATE '2014-01-01' )
) INHERITS (tran);

CREATE TABLE tran_y2014 (
CHECK ( trandate >= DATE '2014-01-01' AND 
trandate < DATE '2015-01-01' )
) INHERITS (tran);

CREATE OR REPLACE FUNCTION trans_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
    IF( NEW.trandate >= DATE '2014-01-01' AND
            NEW.trandate < DATE '2015-01-01' ) THEN
        INSERT INTO tran_y2014 VALUES (NEW.*);
    ELSIF ( NEW.trandate >= DATE '2013-01-01' AND
         NEW.trandate < DATE '2014-01-01' ) THEN
        INSERT INTO tran_y2013 VALUES (NEW.*);
    ELSE
        RAISE EXCEPTION 'Date out of range.  Fix the  
tran_insert_trigger() function!';
    END IF;
    RETURN NULL;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER insert_trans_trigger
    BEFORE INSERT ON tran
    FOR EACH ROW EXECUTE PROCEDURE trans_insert_trigger();
INSERT INTO tran VALUES (1,'2014-01-01' );
INSERT INTO tran VALUES (2,'2013-01-01' );
SELECT * FROM tran;
SELECT * FROM tran_y2013;
SELECT * FROM tran_y2014;
EXPLAIN ANALYZE SELECT * FROM tran WHERE trandate=  
'2013-01-01';
EXPLAIN ANALYZE SELECT * FROM tran WHERE trandate=  
'2014-01-01';
EXPLAIN ANALYZE SELECT * FROM tran WHERE id = 1;
DROP TABLE tran_y2013;
INSERT INTO tran values (1,'2013-01-01' );    
